OneToManyWithAssociationTableEngine.java
package org.codefilarete.stalactite.engine.runtime.onetomany;
import java.util.Collection;
import java.util.function.Function;
import org.codefilarete.stalactite.engine.runtime.AssociationRecord;
import org.codefilarete.stalactite.engine.runtime.AssociationRecordInsertionCascader;
import org.codefilarete.stalactite.engine.runtime.AssociationRecordPersister;
import org.codefilarete.stalactite.engine.runtime.AssociationTable;
import org.codefilarete.stalactite.engine.runtime.ConfiguredRelationalPersister;
import org.codefilarete.stalactite.mapping.EntityMapping;
import org.codefilarete.stalactite.sql.statement.WriteOperationFactory;
/**
* @author Guillaume Mary
*/
public class OneToManyWithAssociationTableEngine<SRC, TRGT, SRCID, TRGTID, C extends Collection<TRGT>, T extends AssociationTable<T, ?, ?, SRCID, TRGTID>>
extends AbstractOneToManyWithAssociationTableEngine<SRC, TRGT, SRCID, TRGTID, C, AssociationRecord, T> {
public OneToManyWithAssociationTableEngine(ConfiguredRelationalPersister<SRC, SRCID> sourcePersister,
ConfiguredRelationalPersister<TRGT, TRGTID> targetPersister,
ManyRelationDescriptor<SRC, TRGT, C> manyRelationDescriptor,
AssociationRecordPersister<AssociationRecord, T> associationPersister,
WriteOperationFactory writeOperationFactory) {
super(sourcePersister, targetPersister, manyRelationDescriptor, associationPersister, writeOperationFactory);
}
@Override
protected AssociationRecordInsertionCascader<SRC, TRGT, SRCID, TRGTID, C> newRecordInsertionCascader(
Function<SRC, C> collectionGetter,
AssociationRecordPersister<AssociationRecord, T> associationPersister,
EntityMapping<SRC, SRCID, ?> mappingStrategy,
EntityMapping<TRGT, TRGTID, ?> targetStrategy) {
return new AssociationRecordInsertionCascader<>(associationPersister, collectionGetter, mappingStrategy, targetStrategy);
}
@Override
protected AssociationRecord newRecord(SRC e, TRGT target, int index) {
return new AssociationRecord(sourcePersister.getMapping().getId(e), targetPersister.getMapping().getId(target));
}
}